cmake_minimum_required(VERSION 3.16)

project(UniversalCmd VERSION 0.1 LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Multimedia)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Multimedia)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core5Compat)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core5Compat)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS MultimediaWidgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS MultimediaWidgets)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS OpenGLWidgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS OpenGLWidgets)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Sql)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Sql)

find_package(OpenGL REQUIRED)


set(PROJECT_SOURCES
        main.cpp
        mainwindow.cpp
        mainwindow.h
        mainwindow.ui
)

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(UniversalCmd
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
        toolutils.h toolutils.cpp
        dragabletab.h dragabletab.cpp dragabletab.ui
        droppablewidget.h droppablewidget.cpp droppablewidget.ui
        pageswidget.h pageswidget.cpp pageswidget.ui
        textstatusmonitor.h textstatusmonitor.cpp textstatusmonitor.ui
        imageeditor.h imageeditor.cpp
        toolutils.h toolutils.cpp
        widgettree.cpp widgettree.h
        res.qrc
        imagestatusmonitor.h imagestatusmonitor.cpp imagestatusmonitor.ui
        svideowidget.h svideowidget.cpp svideowidget.ui
        audiostatusmonitor.h audiostatusmonitor.cpp audiostatusmonitor.ui
        tooltipsbutton.h tooltipsbutton.cpp
        Sliderdialog.h Sliderdialog.cpp Sliderdialog.ui
        dropmanager.h dropmanager.cpp
        tabsscrollarea.h tabsscrollarea.cpp
        sshconnection.h sshconnection.cpp

        sshconsole.h sshconsole.cpp
        ansiescapecodehandler.cpp ansiescapecodehandler.h
        sshcreateguide.h sshcreateguide.cpp sshcreateguide.ui
        flattingwindow.h flattingwindow.cpp
        globalaction.h globalaction.cpp
        videoglwidget.h videoglwidget.cpp


    )
# Define target properties for Android with Qt 6 as:
#    set_property(TARGET UniversalCmd APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
#                 ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()
    if(ANDROID)
        add_library(UniversalCmd SHARED
            ${PROJECT_SOURCES}
        )
# Define properties for Android with Qt 5 after find_package() calls as:
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
    else()
        add_executable(UniversalCmd
            ${PROJECT_SOURCES}
        )
    endif()
endif()

set(LIB_PATH ${PROJECT_SOURCE_DIR}/lib)
include_directories(${PROJECT_SOURCE_DIR}/lib/include)

target_link_libraries(UniversalCmd PRIVATE
    Qt${QT_VERSION_MAJOR}::Widgets
    Qt${QT_VERSION_MAJOR}::Multimedia
    Qt${QT_VERSION_MAJOR}::Core5Compat
    Qt${QT_VERSION_MAJOR}::MultimediaWidgets
    Qt${QT_VERSION_MAJOR}::Sql
    Qt${QT_VERSION_MAJOR}::OpenGLWidgets
    ${OPENGL_LIBRARIES}
    ${LIB_PATH}/libssh.dll
)

# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
if(${QT_VERSION} VERSION_LESS 6.1.0)
  set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.UniversalCmd)
endif()
set_target_properties(UniversalCmd PROPERTIES
    ${BUNDLE_ID_OPTION}
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

include(GNUInstallDirs)
install(TARGETS UniversalCmd
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(UniversalCmd)
endif()
